<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>在新版本的 PHP 中使用旧的 PHP 代码</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="tutorial.forms.html">处理表单</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="tutorial.whatsnext.html">下一步做什么？</a></div>
 <div class="up"><a href="tutorial.html">简明教程</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="tutorial.oldcode" class="section">
  <div class="info"><h1 class="title">在新版本的 PHP 中使用旧的 PHP 代码</h1></div>
  <p class="para">
   现在，PHP 已经发展成为一种流行的脚本语言，可以在很多公共的资源里找到可以在自己的脚本中重新利用的代码。PHP
   语言的开发者为向下兼容性下了很多功夫，因此在新版本的
   PHP 下，老版本的代码应该可以在不作任何改动的情况下（理想地）运行。不过实际上，还是必须对老的代码做一些改动。
  </p>
  <p class="para">
   有可能影响到老版本的代码的最重要的两点改动分别是：
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      取消了旧的 <var class="varname"><var class="varname">$HTTP_*_VARS</var></var>
      数组（在函数或者方法中原本是全局变量）。PHP
      <a href="http://www.php.net/releases/4_1_0.php" class="link external">&raquo;&nbsp;4.1.0</a>
      版本引入了如下<a href="language.variables.superglobals.html" class="link">超全局数组变量</a>：<var class="varname"><var class="varname"><a href="reserved.variables.get.html" class="classname">$_GET</a></var></var>、<var class="varname"><var class="varname"><a href="reserved.variables.post.html" class="classname">$_POST</a></var></var>、<var class="varname"><var class="varname"><a href="reserved.variables.cookies.html" class="classname">$_COOKIE</a></var></var>、<var class="varname"><var class="varname"><a href="reserved.variables.server.html" class="classname">$_SERVER</a></var></var>、<var class="varname"><var class="varname"><a href="reserved.variables.files.html" class="classname">$_FILES</a></var></var>、<var class="varname"><var class="varname"><a href="reserved.variables.environment.html" class="classname">$_ENV</a></var></var>、<var class="varname"><var class="varname"><a href="reserved.variables.request.html" class="classname">$_REQUEST</a></var></var>
      以及 <var class="varname"><var class="varname"><a href="reserved.variables.session.html" class="classname">$_SESSION</a></var></var>。老的 <var class="varname"><var class="varname">$HTTP_*_VARS</var></var>
      数组，诸如 $HTTP_POST_VARS 等，从 PHP 3 就已经开始使用，它们仍然存在。自 PHP 5.0.0 起, 用
<a href="ini.core.html#ini.register-long-arrays" class="link">register_long_arrays</a> 设置选项可禁用
长类型的 PHP <a href="language.variables.predefined.html" class="link">预定义变量</a>数组。
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      外部变量不再被默认注册为全局变量。也就是说，从
      PHP <a href="http://www.php.net/releases/4_2_0.php" class="link external">&raquo;&nbsp;4.2.0</a>
      版开始，<var class="filename">php.ini</var> 中的设置选项
      <a href="ini.core.html#ini.register-globals" class="link">register_globals</a>
      默认值变成了
      <em class="emphasis">off</em>。建议用以上提到的超全局数组变量来访问这些值。但可能老的脚本、书籍以及教程都可能建立在该设置为
      on 的基础上。如果该选项被设置为
      on，则可以在
      URL <em>http://www.example.com/foo.php?id=42</em>
      中直接使用变量 <var class="varname"><var class="varname">$id</var></var>。但不管被设置为 on 还是
      off，<var class="varname"><var class="varname"><a href="reserved.variables.get.html" class="classname">$_GET['id']</a></var></var> 一直有效。
     </span>
    </li>
   </ul>
  </p>
  <p class="para">
   如果希望了解关于这些改动的细节，请参阅“<a href="language.variables.predefined.html" class="link">预定义变量</a>”一章以及其中的连接。
  </p>
 </div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="tutorial.forms.html">处理表单</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="tutorial.whatsnext.html">下一步做什么？</a></div>
 <div class="up"><a href="tutorial.html">简明教程</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
